package com.example.leetcode.DynamicProgramming;


/**
 *
 *
 *如果一个数列至少有三个元素，并且任意两个相邻元素之差相同，则称该数列为等差数列。
 *函数要返回数组 A 中所有为等差数组的子数组个数。
 *
 *
 * 示例:
 * A = [1, 2, 3, 4]
 * 返回: 3, A 中有三个子等差数组: [1, 2, 3], [2, 3, 4] 以及自身 [1, 2, 3, 4]。
 *
 *
 * 【1,2,3】 只有【1，2，3】，个数：1
 * 【1，2，3，4】，多了【2，3，4】，【1，2，3，4】,个数：1+2
 * 【1，2，3，4，5】，多了【3，4，5】【2，3，4，5】，【1，2，3，4，5】,个数：1+2+3
 *
 *  方程: dp[i] = dp[i-1] + 1   dp[i]表示截至第i个数形成了多少个等差数列
 *
 *  边界
 *  dp[0] = 0
 *  dp[1] = 0
 *
 * @Description TODO
 * @date 2021/6/29 15:17
 * @Author liuzhihui
 * @Version 1.0
 */
public class Solution_3_413 {
    public static void main(String[] args) {
//        int[] nums = new int[]{1,2,3,4};
        int[] nums = new int[]{1,2,3,4,5,6};
        int i = numberOfArithmeticSlices(nums);
        System.out.println(i);
    }

    public static int numberOfArithmeticSlices(int[] nums) {
        if (nums.length < 3){
            return 0;
        }

        int dp[] = new int[nums.length];

        int res = 0;

        for (int i = 2; i < nums.length; i++) {
            // 如果是等差数列
            if (nums[i] - nums[i - 1] == nums[i - 1] - nums[i - 2]){
                // dp[i]表示截至第i个数形成了多少个等差数列
                dp[i] = dp[i - 1] + 1;
            }
            res += dp[i];
        }
        return res;
    }

}
